package com.ruoyi.common.utils;

import com.ruoyi.common.core.domain.entity.EventDetail;
import com.ruoyi.common.enums.EventStatusEnum;

import java.util.Date;

/**
 * 活动状态工具类
 * 
 * @author xukai
 */
public class EventStatusUtils {
    
    /**
     * 判断活动状态
     * 
     * @param eventDetail 活动详情
     * @return 活动状态枚举
     */
    public static EventStatusEnum getEventStatus(EventDetail eventDetail) {
        if (eventDetail == null) {
            return null;
        }
        
        Date currentDate = new Date();
        
        // 判断活动状态
        if (currentDate.before(eventDetail.getSignupBegin())) {
            return EventStatusEnum.NOT_STARTED_SIGNUP; // 未开始报名
        } else if (currentDate.after(eventDetail.getSignupBegin()) && currentDate.before(eventDetail.getSignupEnd())) {
            return EventStatusEnum.SIGNUP_IN_PROGRESS; // 报名中
        } else if (currentDate.after(eventDetail.getSignupEnd()) && currentDate.before(eventDetail.getEventBegin())) {
            return EventStatusEnum.WAITING_EVENT_START; // 等待活动开始
        } else if (currentDate.after(eventDetail.getEventBegin()) && currentDate.before(eventDetail.getEventEnd())) {
            return EventStatusEnum.EVENT_IN_PROGRESS; // 活动进行中
        } else {
            return EventStatusEnum.EVENT_ENDED; // 活动已结束
        }
    }
    
    /**
     * 判断活动状态并设置到活动详情对象中
     * 
     * @param eventDetail 活动详情
     * @return 设置了状态的活动详情
     */
    public static EventDetail setEventStatus(EventDetail eventDetail) {
        if (eventDetail == null) {
            return null;
        }
        
        EventStatusEnum statusEnum = getEventStatus(eventDetail);
        eventDetail.setEventStatus(statusEnum.getCode());
        
        return eventDetail;
    }
    
    /**
     * 获取活动状态描述
     * 
     * @param eventDetail 活动详情
     * @return 活动状态描述
     */
    public static String getEventStatusInfo(EventDetail eventDetail) {
        EventStatusEnum statusEnum = getEventStatus(eventDetail);
        return statusEnum != null ? statusEnum.getInfo() : "未知状态";
    }
    
    /**
     * 判断活动是否可以报名
     * 
     * @param eventDetail 活动详情
     * @return 是否可以报名
     */
    public static boolean canSignup(EventDetail eventDetail) {
        if (eventDetail == null) {
            return false;
        }
        
        EventStatusEnum statusEnum = getEventStatus(eventDetail);
        return statusEnum == EventStatusEnum.SIGNUP_IN_PROGRESS;
    }
    
    /**
     * 判断活动是否可以签到
     * 
     * @param eventDetail 活动详情
     * @return 是否可以签到
     */
    public static boolean canSignIn(EventDetail eventDetail) {
        if (eventDetail == null) {
            return false;
        }
        
        EventStatusEnum statusEnum = getEventStatus(eventDetail);
        return statusEnum == EventStatusEnum.EVENT_IN_PROGRESS;
    }
    
    /**
     * 判断活动是否可以签退
     * 
     * @param eventDetail 活动详情
     * @return 是否可以签退
     */
    public static boolean canSignOut(EventDetail eventDetail) {
        if (eventDetail == null) {
            return false;
        }
        
        EventStatusEnum statusEnum = getEventStatus(eventDetail);
        return statusEnum == EventStatusEnum.EVENT_IN_PROGRESS;
    }
    
    /**
     * 判断活动是否已结束
     * 
     * @param eventDetail 活动详情
     * @return 是否已结束
     */
    public static boolean isEnded(EventDetail eventDetail) {
        if (eventDetail == null) {
            return false;
        }
        
        EventStatusEnum statusEnum = getEventStatus(eventDetail);
        return statusEnum == EventStatusEnum.EVENT_ENDED;
    }
} 